#include "constants.h"
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>


namespace RestaurantSystem {
namespace Constants {

QString findProjectRoot() {
    // 从应用程序的执行路径开始查找项目根目录
    QString appPath = QCoreApplication::applicationDirPath();
    QDir dir(appPath);
    
    // 最多向上查找5级目录
    for (int i = 0; i < 5; i++) {
        // 检查是否存在.pro文件，作为项目根目录的标识
        if (QFileInfo::exists(dir.absoluteFilePath("restaurantOrderSystem.pro"))) {
            return dir.absolutePath();
        }
        
        // 或者检查是否同时存在data和src目录
        if (dir.exists(DATA_DIR_NAME) && dir.exists("src")) {
            return dir.absolutePath();
        }
        
        // 向上一级目录
        if (!dir.cdUp()) {
            break;
        }
    }
    
    // 如果找不到项目根目录，使用当前工作目录
    return QDir::currentPath();
}

QString getDataDirectory() {
    static QString dataDir;
    if (dataDir.isEmpty()) {
        // 使用相对路径，提升可移植性
        dataDir = DATA_DIR_NAME;
        
        // 确保目录存在
        QDir().mkpath(dataDir);
    }
    return dataDir + "/";
}

QString getBackupDirectory() {
    static QString backupDir;
    if (backupDir.isEmpty()) {
        QString dataPath = getDataDirectory();
        backupDir = QDir(dataPath).filePath(BACKUP_DIR_NAME);
        
        // 确保目录存在
        QDir().mkpath(backupDir);
    }
    return backupDir + "/";
}

QString getResourcesDirectory() {
    static QString resourcesDir;
    if (resourcesDir.isEmpty()) {
        // 使用相对路径，提升可移植性
        resourcesDir = RESOURCES_DIR_NAME;
        
        // 确保目录存在
        QDir().mkpath(resourcesDir);
    }
    return resourcesDir + "/";
}

QString getUsersFilePath() {
    return getDataDirectory() + USERS_FILE;
}

QString getMenuFilePath() {
    return getDataDirectory() + MENU_FILE;
}

QString getOrdersFilePath() {
    return getDataDirectory() + ORDERS_FILE;
}

QString getRatingsFilePath() {
    return getDataDirectory() + RATINGS_FILE;
}

QString getConfigFilePath() {
    return getDataDirectory() + CONFIG_FILE;
}

} // namespace Constants
} // namespace RestaurantSystem
